home *** CD-ROM | disk | FTP | other *** search
- static int adr[6]={9,8,7,4,2,0};
- static char *month[12]={
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec"};
-
- static unsigned char d,i,*adradr=(char *)0x600003,*dataadr=(char *)0x600001;
-
- readclock(data)
- char data[];
- {
- *adradr=0xc;/* check for end of update cycle */
- d=*dataadr;
- do {
- *adradr=0xc;
- } while((*dataadr&0x10)==0);
- /* here if just completed update cycle */
- do {
- for(i=0;i<6;i++) {
- *adradr=adr[i];
- data[i]=*dataadr;
- }
- *adradr=0xa;
- if((*dataadr&0x80)!=0) continue;/* update */
- *adradr=0xc;
- } while((*dataadr&0x10)!=0);
- /* here if read without encountering another update */
- }
-
- writeclock(data)
- char data[];
- {
- *adradr=0xc;/* check for end of update cycle */
- d=*dataadr;
- do {
- *adradr=0xc;
- } while((*dataadr&0x10)==0);
- /* here if just completed update cycle */
- do {
- for(i=0;i<6;i++) {
- *adradr=adr[i];
- *dataadr=data[i];
- }
- *adradr=0xa;
- if((*dataadr&0x80)!=0) continue;/* update */
- *adradr=0xc;
- } while((*dataadr&0x10)!=0);
- /* here if written without encountering another update */
- }
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- int i;
- char data[6];
- char string[40];
- int day,year,hour,min,sec;
- /* check validity of clock */
- *adradr=0xa;
- if((i=(*dataadr&0x7f))!=0x20)
- {
- printf("reg a is %d\n",i);
- *adradr=0xa;
- *dataadr=0x20;
- *adradr=0xd;
- *dataadr=0;
- }
- *adradr=0xb;
- if((i=*dataadr)!=0x7)
- {
- printf("reg b is %d\n",i);
- *adradr=0xb;
- *dataadr=0x7;
- *adradr=0xd;
- *dataadr=0;
- }
- *adradr=0xd;
- if(((i=*dataadr) != 0x80) && (argc < 3))
- {
- printf("reg d is %d\n",i);
- printf("CLOCK CHIP INVALID\n");
- printf("To validate clock chip execute:\n");
- printf(" clock dd-mmm-yy hh:mm:ss\n");
- exit(30);
- }
- *adradr=0xd;
- *dataadr=0x80; /* set clock ok bit */
- readclock(data);
- while((argc--)>1){
- if(strlen(argv[argc])==9&&argv[argc][2]=='-'&&argv[argc][6]=='-')
- { /* handle date */
- sscanf(argv[argc],"%2d-%3s-%2d",&day,string,&year);
- if(day>0&&day<32) data[2]=day;
- else {
- printf("bad day of month\n");
- exit(30);
- }
- for(i=0;i<12;i++) {
- for(d=0;d<3;d++) {
- if(tolower(string[d])!=tolower(month[i][d])) break;
- else if(d==2) data[1]=i+1;
- }
- if(d==3) break;
- }
- if(i==12){
- printf("bad month\n");
- exit(30);
- }
- data[0]=year;
- }
- else if(strlen(argv[argc])>4&&argv[argc][2]==':') /* time */
- { /* handle time */
- if(strlen(argv[argc])==8&&argv[argc][5]==':')
- sscanf(argv[argc],"%2d:%2d:%2d",&hour,&min,&sec);
- else {
- sscanf(argv[argc],"%2d:%2d",&hour,&min);
- sec=0;
- }
- if(hour>=0&&hour<24) data[3]=hour;
- else {
- printf("bad hour\n");
- exit(30);
- }
- if(min>=0 && min<60) data[4]=min;
- else {
- printf("bad minute\n");
- exit(30);
- }
- if(sec>=0 && sec<60) data[5]=sec;
- else {
- printf("bad second\n");
- exit(30);
- }
- }
- else /* syntax error */
- {
- printf("Incorrect arguements\n");
- exit(30);
- }
- writeclock(data);
- }
-
- sprintf(string,"date %2d-%3s-%2d %2d:%2d:%2d\n",data[2],month[data[1]-1],
- data[0],data[3],data[4],data[5]);
- for(i=0;string[i];i++) {
- if(string[i]==' ' && i!=4 && i!=14) string[i]='0';
- }
- if((!Execute(string,0,0))||(!Execute("date\n",0,0)))
- printf("\nDATE INVALID\n");
- }
-
-
-